package com.start.form.engine.core;

import com.start.common.entity.StartDicData;
import com.start.form.engine.core.entity.StartFormConfig;
import com.start.form.engine.core.model.StartFormConfigModel;

import java.util.List;

public interface StartFormEngine {
    /**
     * 创建表单
     *
     * @param entity 数据表配置
     */
    default void createForm(StartFormConfig entity) {
        createForm(entity, false);
    }

    /**
     * 创建表
     *
     * @param entity          表配置
     * @param synchronization 是否同步 到数据库
     */
    void createForm(StartFormConfig entity, boolean synchronization);


    /**
     * 修改表单
     *
     * @param config
     */
    default void updateForm(StartFormConfig config) {
        updateForm(config, false);
    }

    /**
     * 创建表
     *
     * @param entity          表配置 数据表配置
     * @param synchronization 是否同步 到数据库 false 不同步
     */
    void updateForm(StartFormConfig entity, boolean synchronization);

    /**
     * 获取表单
     *
     * @param tableId
     * @return
     */
    default StartFormConfigModel getForm(String tableId) {
        return getForm(tableId, false);
    }

    /**
     * 根据表单编码获取表单配置
     *
     * @param formCode 表单编码
     * @return
     */
    default StartFormConfigModel getFormByTableCode(String formCode) {
        return getFormByTableCode(formCode, false);
    }

    /**
     * 根据表单编码获取表单配置
     *
     * @param formCode   表单编码
     * @param loadColumn 是否加载列信息
     * @return
     */
    StartFormConfigModel getFormByTableCode(String formCode, boolean loadColumn);


    /**
     * 获取表单
     *
     * @param tableId
     * @return
     */
    StartFormConfigModel getForm(String tableId, boolean loadColumn);

    /**
     * 获取表单
     *
     * @param formConfig
     * @return
     */
    StartFormConfigModel getForm(StartFormConfig formConfig, boolean loadColumn);

    /**
     * 删除表单
     *
     * @param tableId
     */
    void deleteForm(String tableId);

    /**
     * 获取数据表服务
     *
     * @param tableId
     * @return
     */
    TableEngineService getTableEngineService(String tableId);

    TableEngineService getTableEngineService(StartFormConfig config);

    /**
     * 获取数据存储服务
     *
     * @param tableId
     * @return
     */
    default TableDataEngineService getTableDataEngineService(String tableId) {
        return getTableDataEngineService(getForm(tableId));
    }

    TableDataEngineService getTableDataEngineService(StartFormConfig config);

    /**
     * 获取全部存储器
     *
     * @return
     */
    List<StartDicData> getAllStorage();
}
